#include "BlockingQueue.hpp"

int n = 0;
void* confun(void* args)
{
    BlockingQueue<int>* bq = static_cast<BlockingQueue<int>*>(args);
    sleep(3);
    while(true)
    {
        //sleep(3);
        int ret = 0;
        bq->ConXf(&ret);
        cout<<"消费者消费了商品"<<ret<<endl;
        sleep(1);
    }
}
void* profun(void *args)
{
    BlockingQueue<int>* bq = static_cast<BlockingQueue<int>*>(args);
    while(true)
    {
        bq->ProSc(n);
        cout<<"生产者生成了商品"<<n<<endl;
        cout<<endl;
        n++;
        sleep(1);
    }
}
int main()
{
    pthread_t c[3],p[2];
    //创建生产者消费者
    BlockingQueue<int> bq(5);
    for(int i = 0;i<3;i++)
    {
        pthread_create(&c[i],nullptr,confun,&bq);
    }
    for(int i = 0;i<2;i++)
    {
        pthread_create(&p[i],nullptr,profun,&bq);
    }
    while(1);
    for(int i = 0;i<3;i++)
    {
        pthread_join(c[i],nullptr);
    }
    for(int i = 0;i<3;i++)
    {
        pthread_join(p[i],nullptr);
    }
    // pthread_create(&c[0],nullptr,confun,&bq);
    // pthread_create(&p[0],nullptr,profun,&bq);

    // while(true) ;
    // pthread_join(c[0],nullptr);
    // pthread_join(p[0],nullptr);
    return 0;
}